<?php
/**
 * Created by PhpStorm.
 * User: stupboy
 * Date: 2018/3/29
 * Time: 15:31
 * Mail:87658989@qq.com
 */

namespace app\api\controller\passenger;

use app\api\model\Passenger;
use think\Db;
/**
 * @name【乘客接口】
 * @baseurl【passenger】
 * @file【passenger/Account.php】
 */
class Account extends Base
{
    /**
     * @name【上传头像】
     * @desc【上传头像】
     * @uri【upload_head_img】
     * @method【post】
     * @param【
     * ptoken $ string $ token $ 校验码 $ 1#
     * head_portrait $ string $ sdsad.xx $ 文件 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息
     * 】
     */
    public function upload_head_img()
    {
        $p = input('post.');
        // 获取表单上传文件 例如上传了001.jpg
        $base64_image = str_replace(' ', '+', $p['head_portrait']);
        //post的数据里面，加号会被替换为空格，需要重新替换回来，如果不是post的数据，则注释掉这一行
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result)) {
            //匹配成功
            if ($result[2] == 'jpeg') {
                $image_name = uniqid() . '.jpg';
            } else {
                $image_name = uniqid() . '.' . $result[2];
            }
            $image_file = ROOT_PATH . 'public/upload/head_portrait/' . $p['passenger_id'] % 5 . '/';
            if (!file_exists($image_file)) {
                mkdir($image_file, 0777);
            }
            //服务器文件存储路径
            $image_file = $image_file . $image_name;
            file_put_contents($image_file, base64_decode(str_replace($result[1], '', $base64_image)));
            if (file_exists($image_file)) {
                $data['head_portrait'] = $image_file;
                $resl = Db::name('passenger')->where('passenger_id', $this->passengerInfo['passenger_id'])->update($data);
                if ($resl) {
                    $info['head_portrait'] = "new.jjcxfw.com/upload/head_portrait/" . $p['passenger_id'] % 5 . "/" . $image_name;
                    return $this->retSucc(['data'=>$info]);
                } else {
                    return $this->retError('系统异常！上传失败！');
                }
            } else {
                return $this->retError('图片上传失败！');
            }
        } else {
            return $this->retError('文件错误！');
        }
    }

    /**
     * @name【我的钱包】
     * @desc【我的钱包】
     * @uri【passenger_wallet】
     * @method【post】
     * @param【
     * ptoken $ string $ token $ 校验码 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息
     * 】
     */
    public function passenger_wallet()
    {
        $info = Db::name('passenger')
            ->where('passenger_id', $this->passengerInfo['passenger_id'])->field('balance,business_quota,unit__quota,card_number,wechat')
            ->find();
        return $this->retSucc(['data'=>$info]);
    }

    /**
     * @name【充值】
     * @desc【充值】
     * @uri【wallet_recharge】
     * @method【post】
     * @param【
     * ptoken $ string $ token $ 校验码 $ 1#
     * passenger_id $ int $ 1 $ 用户乘客ID $ 1#
     * user_id $ int $ 1 $ 用户ID $ 1#
     * money $ decimal $ 15.12 $ 充值金额 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息
     * 】
     */
    public function wallet_recharge()
    {
        $p = input('post.');
        $data['passenger_id']  = $p['passenger_id'];
        $data['area_id']       = Db::name('user')->where('user_id', $p['user_id'])->value('area_id');
        $data['recharge_time'] = date('Y-m-d H:i:s', time());
        $data['money']         = $p['money'];
        $data['is_success']    = 9;
        $sj                    = $this->sj_rand();
        $recharge_no           = strtotime(date('Y-m-d H:i:s', time())) . "$sj";    //订单号
        $data['recharge_no']   = $recharge_no;
        $resl                  = Db::name('recharge_record')->insert($data);
        if ($resl) {
            $weChat = new \app\base\service\WechatPay();
            list($ret, $data) = $weChat->makeWeChatPay('充值', '晋江出行', $recharge_no, $p['money']);
            $code = $ret == 0 ? 0 : 1;
            return $this->retAll($code,$data);
        } else {
            return $this->retError('系统异常，生成订单失败！');
        }
    }

    /**
     * @name【设置提现密码】
     * @desc【设置提现密码】
     * @uri【pay_pwd】
     * @method【post】
     * @param【
     * user_id $ int $ 1 $ 用户ID $ 1#
     * new_pay_pwd $ string $ 1 $ 新密码 $ 1#
     * old_pay_pwd $ string $ 1 $ 旧密码 $ 0
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息
     * 】
     */
    public function pay_pwd()
    {
        $p = input('post.');
        $where['user_id'] = $p['user_id'];
        $user_info = Db::name('user')->where($where)->field('is_set_pwd,withdraw_pwd')->find();
        $is_set = $user_info['is_set_pwd'];
        $new_pay_pwd = md5($p['new_pay_pwd']);
        //9-未设置 1-设置
        if ($is_set == '9') {
            $data['withdraw_pwd'] = $new_pay_pwd;
            $data['is_set_pwd'] = '1';
            $resl = Db::name('user')->where($where)->update($data);
        } else {
            if ($user_info['withdraw_pwd'] == md5($p['old_pay_pwd'])) {
                $resl = Db::name('user')->where($where)->setField('withdraw_pwd', $new_pay_pwd);
            } else {
                return $this->retError('旧密码错误！');
            }
        }
        if ($resl) {
            return $this->retSucc();
        } else {
            return $this->retError('系统异常，修改失败！');
        }
    }

    /**
     * @name【修改登入密码】
     * @desc【修改登入密码】
     * @uri【modifyPassword】
     * @method【post】
     * @param【
     *  ptoken $ string $ token $ 校验码 $ 1#
     *  old_password $ string $ token $ 旧密码 $ 1#
     *  new_password $ string $ token $ 新密码 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息
     * 】
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @throws \think\exception\PDOException
     */
    public function modifyPassword(){
        $uid = $this->passengerInfo['user_id'];
        $old = input('old_password','');
        $new = input('new_password','');
        list($code,$msg) = (new Passenger())->modifyPassword($uid,$old,$new);
        return $this->retAll($code,$msg);
    }

    /**
     * @name【交易记录】
     * @desc【交易记录】
     * @uri【trading_detail】
     * @method【post】
     * @param【
     * ptoken $ string $ token $ 校验码 $ 1#
     * type $ string $ 1 $ type： 1-个人支付   2-单位支付  3-财政支付  4-所有支付记录 5-充值记录 $ 1
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息
     * 】
     */
    public function trading_detail()
    {
        $p = input('param.');
        $where['passenger_id'] = $this->passengerInfo['passenger_id'];
        //筛选支付方式
        $pay_type = $p['type'];
        $info = Db::name('order')->order('payment_time desc')->where($where)->whereIn('order_state', [10, 11])
            ->field('payment_time,settlement_price AS money')->select();
        if ($pay_type == 1 || $pay_type == 2 || $pay_type == 3 || $pay_type == 4) {
            if ($pay_type !== "4") {
                $where['pay_type'] = $pay_type;
            }
            //订单状态，1：待审批，2：已批准，3：已拒绝，4：待用车，5：已派车，6：接驾中，
            //7：已到达出发地，8：已到达目的地，9：待支付，10：待评价，11：已完成，12：已取消，13：已终止，14：无效
            $info = Db::name('order')->order('payment_time desc')->where($where)->whereIn('order_state', [10, 11])
                ->field('payment_time,settlement_price AS money')->select();
        } elseif ($p['type'] == 5) {
            $where['is_success'] = '1';
            $info = Db::name('recharge_record')->order('recharge_time desc')->where($where)->field('money,give_money,recharge_time')->select();
        }
        return $this->retAll(1,$info);
    }
}